@echo off
setlocal enabledelayedexpansion

REM ============================================================
REM  🐙 Build & Export Squid Proxy Docker Image (Windows version)
REM  Maintainer: zxy <admin@zxy.com>
REM  Description: 自动构建并导出带 Basic Auth 的 Squid 镜像
REM ============================================================

set IMAGE_NAME=squid-proxy-zxy
set IMAGE_TAG=latest
set OUTPUT_FILE=%~dp0%IMAGE_NAME%.tar
set CONF_DIR=%~dp0conf
set PASS_FILE=%CONF_DIR%\passwd
set USERNAME=zxy
set PASSWORD=zxy999

echo ============================================================
echo [1/5] 🔍 检查环境...
echo ============================================================

REM 检查 Docker 是否可用
docker version >nul 2>&1
if %ERRORLEVEL% neq 0 (
    echo ❌ Docker 未启动或未安装，请先启动 Docker Desktop！
    pause
    exit /b 1
)

REM 检查配置文件是否存在
if not exist "%CONF_DIR%\squid.conf" (
    echo ❌ 未找到配置文件：%CONF_DIR%\squid.conf
    echo 请确保 conf\ 文件夹存在并包含 squid.conf
    pause
    exit /b 1
)

echo ✅ Docker 环境与配置文件检测通过。
echo.

echo ============================================================
echo [2/5] 🔐 生成认证文件 (%PASS_FILE%) ...
echo ============================================================

REM 若系统装有 htpasswd，则直接使用，否则通过 Docker 容器生成
if exist "%PASS_FILE%" (
    del /f /q "%PASS_FILE%" >nul 2>&1
)

docker run --rm alpine:latest sh -c ^
  "apk add --no-cache apache2-utils >/dev/null 2>&1 && htpasswd -nb %USERNAME% %PASSWORD%" > "%PASS_FILE%"

if %ERRORLEVEL% neq 0 (
    echo ❌ 生成认证文件失败，请检查 Docker 网络环境！
    pause
    exit /b %ERRORLEVEL%
)

echo ✅ 已生成 conf\passwd ：
type "%PASS_FILE%"
echo.

echo ============================================================
echo [3/5] 🚀 开始构建 Docker 镜像...
echo ============================================================

docker build -t %IMAGE_NAME%:%IMAGE_TAG% .

if %ERRORLEVEL% neq 0 (
    echo ❌ 构建失败，请检查 Dockerfile 或配置文件！
    pause
    exit /b %ERRORLEVEL%
)

echo.
echo ============================================================
echo [4/5] 📦 导出镜像为 %OUTPUT_FILE%
echo ============================================================

docker save %IMAGE_NAME%:%IMAGE_TAG% -o "%OUTPUT_FILE%"

if %ERRORLEVEL% neq 0 (
    echo ❌ 导出失败，请检查 Docker 是否正在运行！
    pause
    exit /b %ERRORLEVEL%
)

echo.
echo ============================================================
echo [5/5] ✅ 操作完成！
echo ============================================================
echo 镜像名称:   %IMAGE_NAME%:%IMAGE_TAG%
echo 导出文件:   %OUTPUT_FILE%
echo.
echo 📦 要加载镜像，请在其他机器执行：
echo     docker load -i %IMAGE_NAME%.tar
echo.
echo 🔧 启动命令示例：
echo     docker run -d --name squid-zxy -p 3128:3128 %IMAGE_NAME%:%IMAGE_TAG%
echo.
pause
